﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using JudoTec.cls;
using MySql.Data.MySqlClient;

namespace JudoTec.forms
{
    public partial class VentanaCompeticion : UserControl
    {
        MySqlConnection conexion;
        Competicion miCompeticion;
        MySqlDataAdapter adaptador;
        DataTable dt_tablaParticipantesInscritos;
        DataTable dt_final;
        DataTable dt_semifinal;
        DataTable dt_Participantes;
        System.Data.DataSet datos;
        MySqlCommand comando;


        //TableLayoutPanel tableLayoutPanel1;
        Liga miLiga1;
        Liga miLiga2;
        Resultados miResultado;
        Semifinales miSemifinal;
        int numLigas;
        int numParticipantes;
        int participantesLiga1;

        public VentanaCompeticion()
        {
            InitializeComponent();
        }
        public VentanaCompeticion(Competicion competicion)
        {
            InitializeComponent();
            this.miCompeticion = competicion;
            
            //Metodo encargado de rellenar la tabla inscritos
            if (!miCompeticion.Participantes_Completos)
                inscribirParticipantes();

            //Metodo encargado de rellenar la tabla inscritos
            if (!miCompeticion.Combates_Completos)
            {
                inscribirCombates();
                btn_Finalizar_Competicion.Enabled = false;
            }
            else //Asi conseguimos el numero de ligas.....
                rellenarTablaInscritos();
            
            if(numLigas == -1)
               MessageBox.Show("Error Insuficientes Participantes", "Error");
            if(numLigas == 1)
            {
                miLiga1 = new Liga(miCompeticion.ID_Competicion, 1);
                miLiga1.Dock = DockStyle.Fill;
                tableLayoutPanel1.Controls.Add(miLiga1, 0, 0);
                btn_Finalizar_Competicion.Text = "Finalizar Competición";
            }
            else if(numLigas == 2)
            {
                miLiga1 = new Liga(miCompeticion.ID_Competicion, 1);
                miLiga1.Dock = DockStyle.Fill;
                tableLayoutPanel1.Controls.Add(miLiga1, 0, 0);
                miLiga2 = new Liga(miCompeticion.ID_Competicion, 2);
                miLiga2.Dock = DockStyle.Fill;
                tableLayoutPanel1.Controls.Add(miLiga2, 0, 1);
                dt_semifinal = obtener_Combates_Ronda(2);
                if (dt_semifinal.Rows.Count == 2)
                {
                    btn_Finalizar_Competicion.Enabled = false;
                    miSemifinal = new Semifinales(miCompeticion.ID_Competicion, this);
                    tableLayoutPanel1.Controls.Add(miSemifinal, 1, 0);
                    rellenarSemifinal(dt_semifinal);
                    dt_final = obtener_Combates_Ronda(3);
                    if (dt_final.Rows.Count == 2)
                        rellenarFinal(dt_final);
                }

            }
        }

        //Metodo encargado de rellenar la tabla inscritos
        private void inscribirParticipantes()
        {
            string consulta;
            MySqlCommand comando;
            MySqlConnection conexion;

            try{
                // Conexion, consulta y desconexión de la BD
                conexion = cls.ConexionMySQL.IniciarConexion();

                //Primero eliminamos los registros antiguos correspondientes a los participantes para la competicion
                consulta = "DELETE FROM inscritos WHERE Id_Competicion = " + this.miCompeticion.ID_Competicion;

                comando = new MySqlCommand(consulta, conexion);
                comando.ExecuteNonQuery();
                //Segundo insertamos los participantes nuevos de la competicion OJO PARA QUE SEA ALEATORIO VER : ORDER BY rand()
                consulta = "INSERT INTO inscritos (DNI_Participante, Id_Competicion) SELECT participantes.DNI_Participante, competiciones.Id_Competicion " +
                           "FROM participantes, competiciones WHERE participantes.Edad >= competiciones.Edad_Min AND participantes.Edad <= competiciones.Edad_Max " +
                           "AND participantes.Peso >= competiciones.Peso_Min AND participantes.Peso <= competiciones.Peso_Max " +
                           "AND participantes.Sexo = competiciones.Sexo AND participantes.Activo = true AND competiciones.Id_Competicion = " + this.miCompeticion.ID_Competicion + " ORDER BY rand()";
                comando = new MySqlCommand(consulta, conexion);
                comando.ExecuteNonQuery();
            
                //Actualizamos la tabla de competiciones poniendo los incritos como completos
                consulta = "UPDATE competiciones SET Participantes_Completos= true WHERE Id_Competicion = " + this.miCompeticion.ID_Competicion;
                comando = new MySqlCommand(consulta, conexion);
                comando.ExecuteNonQuery();
                conexion.Close();

                MessageBox.Show("Participantes Inscritos con Exito", "Mensaje Informativo",MessageBoxButtons.OK, MessageBoxIcon.Information);
            }catch (Exception)
            {
                MessageBox.Show("Error al Inscribir los Participantes", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }

         }

        //Metodo encargado de rellenar la tabla combates
        private void inscribirCombates()
        {
            string consulta;
            
            conexion = cls.ConexionMySQL.IniciarConexion();

            //Primero eliminamos los registros antiguos correspondientes a los participantes para la competicion
            consulta = "DELETE FROM combates WHERE Id_Competicion = " + this.miCompeticion.ID_Competicion;

            comando = new MySqlCommand(consulta, conexion);
            comando.ExecuteNonQuery();

            try
            {
                rellenarTablaInscritos();
                if(numLigas != -1)
                {
                    if (numLigas == 1)
                    {
                        //  foreach (DataRow fila in tabla.Rows)
                        for (int i = 0; i < numParticipantes; i++)
                        {
                            for (int j = i + 1; j < numParticipantes; j++)
                            {
                                Combate miCombate = new Combate();
                                miCombate.Id_Competicion = miCompeticion.ID_Competicion;
                                miCombate.Liga = 1;
                                miCombate.Ronda = 1;
                                miCombate.Participante_Primero = i + 1;
                                miCombate.Participante_Segundo = j + 1;
                                miCombate.Dni_1 = dt_tablaParticipantesInscritos.Rows[i].ItemArray[0].ToString();
                                miCombate.Dni_2 = dt_tablaParticipantesInscritos.Rows[j].ItemArray[0].ToString();
                                miCombate.Puntuacion_1 = 0;
                                miCombate.Puntuacion_2 = 0;
                                miCombate.Activo = true;
                                miCombate.InsertarCombate();
                            }
                        }
                    }
                    else
                    {
                        for (int i = 0; i < participantesLiga1; i++)
                        {
                            for (int j = i + 1; j < participantesLiga1; j++)
                            {
                                Combate miCombate = new Combate();
                                miCombate.Id_Competicion = miCompeticion.ID_Competicion;
                                miCombate.Liga = 1;
                                miCombate.Ronda = 1;
                                miCombate.Participante_Primero = i + 1;
                                miCombate.Participante_Segundo = j + 1;
                                miCombate.Dni_1 = dt_tablaParticipantesInscritos.Rows[i].ItemArray[0].ToString();
                                miCombate.Dni_2 = dt_tablaParticipantesInscritos.Rows[j].ItemArray[0].ToString();
                                miCombate.Puntuacion_1 = 0;
                                miCombate.Puntuacion_2 = 0;
                                miCombate.Activo = true;
                                miCombate.InsertarCombate();
                            }
                        }
                        int participantesLiga2 = numParticipantes - participantesLiga1;
                        for (int i = 0; i < (participantesLiga2); i++)
                        {
                            for (int j = i + 1; j < (participantesLiga2); j++)
                            {
                                Combate miCombate = new Combate();
                                miCombate.Id_Competicion = miCompeticion.ID_Competicion;
                                miCombate.Liga = 2;
                                miCombate.Ronda = 1;
                                miCombate.Participante_Primero = i + 1;
                                miCombate.Participante_Segundo = j + 1;
                                miCombate.Dni_1 = dt_tablaParticipantesInscritos.Rows[participantesLiga1 + i].ItemArray[0].ToString();
                                miCombate.Dni_2 = dt_tablaParticipantesInscritos.Rows[participantesLiga1 + j].ItemArray[0].ToString();
                                miCombate.Puntuacion_1 = 0;
                                miCombate.Puntuacion_2 = 0;
                                miCombate.Activo = true;
                                miCombate.InsertarCombate();
                            }
                        }
                    }


                    //Actualizamos la tabla de competiciones poniendo los incritos como completos
                    consulta = "UPDATE competiciones SET Combates_Completos= true WHERE Id_Competicion = " + this.miCompeticion.ID_Competicion;
                    comando = new MySqlCommand(consulta, conexion);
                    comando.ExecuteNonQuery();
                    conexion.Close();

                    MessageBox.Show("Combates Añadidos con Exito", "Mensaje Informativo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }catch (Exception)
            {
                MessageBox.Show("Error al Añadir los Combates", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        //Metodo que rellena la tabla de participantes de una competicion y me dice si es necesario una o dos ligas
        private void rellenarTablaInscritos()
        {
            string consulta;

            conexion = cls.ConexionMySQL.IniciarConexion();

            // Consulta SQL en cadena string
            consulta = "SELECT * FROM inscritos WHERE Id_Competicion = " + this.miCompeticion.ID_Competicion;
            // Relacionamos la consulta con la conexion mediante el objeto comando
            comando = new MySqlCommand(consulta, conexion);
            // Creamos un DataSet que contendra los datos de la BD en local
            datos = new DataSet();
            // El adaptador será el puente de union entre la BD y en DataSet
            adaptador = new MySqlDataAdapter();
            // Cargamos el comando en el adapatador
            adaptador.SelectCommand = comando;
            // Aqui es donde se realiza la consulta SQL y la guardamos en el dataset, 
            //dentro de un datatable llamado miParticipantes (Un dataset es un cto de dataTables)
            adaptador.Fill(datos, "misInscritos");
            // Guardamos la nueba tabla de nuestro DataSet en un dataTable

            dt_tablaParticipantesInscritos = datos.Tables["misInscritos"];
            //Definimos la clave principal de la tabla para pòder hacer posteriores busquedas con el metodo find()
            dt_tablaParticipantesInscritos.PrimaryKey = new DataColumn[] { dt_tablaParticipantesInscritos.Columns["DNI_Participante"] };

            numParticipantes = dt_tablaParticipantesInscritos.Rows.Count;
            // calculamos el numero de ligas
            participantesLiga1 = 0;

            //AQUI calculamos el numero d eligas que vamos a necesitar
            if (numParticipantes <= 8)
                numLigas = 1;
            else
            {
                numLigas = 2;
                participantesLiga1 = (numParticipantes / 2) + (numParticipantes % 2);
            }
            if (numParticipantes < 2)
            {
                numLigas = -1;
            }
        }

        //Boton que llama al metodo de inscribir los aprticipantes
        private void btn_reinscribir_participantes_Click(object sender, EventArgs e)
        {
            inscribirParticipantes();
        }

        //Boton de volver a generar lo combates..... una vez hecho eso
        // vuelve a cargar las ligas..... BOTON VOLVER A GENERAR COMBATES
        private void button1_Click(object sender, EventArgs e)
        {
            if (miResultado != null)
                miResultado.Dispose();
            if (miSemifinal != null)
                miSemifinal.Dispose();

            inscribirCombates();
            if (numLigas == 1)
            {
                miLiga1.Dispose();
                miLiga1 = new Liga(miCompeticion.ID_Competicion, 1);
                miLiga1.Dock = DockStyle.Fill;
                tableLayoutPanel1.Controls.Add(miLiga1, 0, 0);
            }
            if (numLigas == 2){
                miLiga1.Dispose();
                miLiga1 = new Liga(miCompeticion.ID_Competicion, 1);
                miLiga1.Dock = DockStyle.Fill;
                tableLayoutPanel1.Controls.Add(miLiga1, 0, 0);

                miLiga2.Dispose();
                miLiga2 = new Liga(miCompeticion.ID_Competicion, 2);
                miLiga2.Dock = DockStyle.Fill;
                tableLayoutPanel1.Controls.Add(miLiga2, 0, 1);
            }
        }

        //Boton que me guarda los resultados de los combates
        private void btn_Guardar_Combates_Click(object sender, EventArgs e)
        {
           /* if (miResultado != null)
                miResultado.Dispose();
            if (miSemifinal != null)
                miSemifinal.Dispose();*/
            
            try
            {
                if (numLigas == 1)
                    miLiga1.guardarTabla();
                
                if (numLigas == 2)
                {
                    miLiga1.guardarTabla();
                    miLiga2.guardarTabla();
                }
                this.btn_Finalizar_Competicion.Enabled = true;
                MessageBox.Show("Combates Guardados con Exito", "Mensaje Informativo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception)
            {
                MessageBox.Show("Error al Guardar los Combates", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            
        }

        //Boton que finaliza la Liga- En caso de ser solo liga mostrará la clasificacion
        // en caso de ser 2 ligas mostrará las semifinales BOTON FINALIZAR LIGA
        private void button1_Click_1(object sender, EventArgs e)
        {
            if (numLigas == 1)
            {
                if (miResultado != null)
                    miResultado.Dispose();
                List<Puntuacion> listado = calcularClasificacionLiga(1, numParticipantes);
                miResultado = new Resultados(listado);
                tableLayoutPanel1.Controls.Add(miResultado, 1, 0);
                this.btn_Finalizar_Competicion.Enabled = false;
            }
            if (numLigas == 2)
            {
                if (miResultado != null)
                    miResultado.Dispose();
                if (miSemifinal != null)
                {
                    miSemifinal.Dispose();
                    if (miSemifinal.MiResultado != null)
                        miSemifinal.MiResultado.Dispose();
                }
                //Obtenemos los la lista con los competidores de cada liga ordenados del mejor al peor
                List<Puntuacion> listado1 = calcularClasificacionLiga(1, (numParticipantes / 2) + (numParticipantes % 2));
                List<Puntuacion> listado2 = calcularClasificacionLiga(2, numParticipantes - (numParticipantes / 2) - (numParticipantes % 2));
                //Creamos el control que contendrá tanto la final como la semifinal
                miSemifinal = new Semifinales(miCompeticion.ID_Competicion, this);

                //Ocultamos todo lo relaiconado con la final
                ((Label)miSemifinal.Controls.Find("label12", true)[0]).Visible=false;
                ((Panel)miSemifinal.Controls.Find("panel2", true)[0]).Visible=false;
                ((Button)miSemifinal.Controls.Find("btn_Guardar_Finales", true)[0]).Visible=false;
                //Añadimos el el control semifinal a la tabla que maqueta el programa
                tableLayoutPanel1.Controls.Add(miSemifinal, 1, 0);
                dt_semifinal = obtener_Combates_Ronda(2);

                inscribirCombatesRonda(listado1, listado2, 2);
                //Ponemos los nombres y apellidos de los participantes
                ((Label)miSemifinal.Controls.Find("lb_Nombre_1A", true)[0]).Text = listado1[0].Nombre;
                ((Label)miSemifinal.Controls.Find("lb_Nombre_2B", true)[0]).Text = listado2[1].Nombre;
                ((Label)miSemifinal.Controls.Find("lb_Nombre_1B", true)[0]).Text = listado2[0].Nombre;
                ((Label)miSemifinal.Controls.Find("lb_Nombre_2A", true)[0]).Text = listado1[1].Nombre;
                //Ponemos la puntuaciones
                ((TextBox)miSemifinal.Controls.Find("tb_Ptos_1A", true)[0]).Text = "0";
                ((TextBox)miSemifinal.Controls.Find("tb_Ptos_2B", true)[0]).Text = "0";
                ((TextBox)miSemifinal.Controls.Find("tb_Ptos_1B", true)[0]).Text = "0";
                ((TextBox)miSemifinal.Controls.Find("tb_Ptos_2A", true)[0]).Text = "0";
                //Ponemos los dni de los participantes y los ocultamos...
                ((Label)miSemifinal.Controls.Find("lb_DNI_1A", true)[0]).Text = listado1[0].Dni;
                ((Label)miSemifinal.Controls.Find("lb_DNI_2B", true)[0]).Text = listado2[1].Dni;
                ((Label)miSemifinal.Controls.Find("lb_DNI_1B", true)[0]).Text = listado2[0].Dni;
                ((Label)miSemifinal.Controls.Find("lb_DNI_2A", true)[0]).Text = listado1[1].Dni;

                obtenerListadoParticipantes();
                this.btn_Finalizar_Competicion.Enabled = false;
            }
        }

        //Metodo que se encarga de rellenarme la tabla de la semifinal
        private void rellenarSemifinal(DataTable semifinal)
        {
            obtenerListadoParticipantes();
            //Cargamos los nombres y apellidos 
            ((Label)miSemifinal.Controls.Find("lb_Nombre_1A", true)[0]).Text = Convert.ToString(dt_Participantes.Rows.Find(semifinal.Rows[0][6])[1]) + " " + Convert.ToString(dt_Participantes.Rows.Find(semifinal.Rows[0][6])[2]);
            ((Label)miSemifinal.Controls.Find("lb_Nombre_2B", true)[0]).Text = Convert.ToString(dt_Participantes.Rows.Find(semifinal.Rows[0][7])[1]) + " " + Convert.ToString(dt_Participantes.Rows.Find(semifinal.Rows[0][7])[2]);
            ((Label)miSemifinal.Controls.Find("lb_Nombre_1B", true)[0]).Text = Convert.ToString(dt_Participantes.Rows.Find(semifinal.Rows[1][6])[1]) + " " + Convert.ToString(dt_Participantes.Rows.Find(semifinal.Rows[1][6])[2]);
            ((Label)miSemifinal.Controls.Find("lb_Nombre_2A", true)[0]).Text = Convert.ToString(dt_Participantes.Rows.Find(semifinal.Rows[1][7])[1]) + " " + Convert.ToString(dt_Participantes.Rows.Find(semifinal.Rows[1][7])[2]);
            //Cargamos los puntos 
            ((TextBox)miSemifinal.Controls.Find("tb_Ptos_1A", true)[0]).Text = Convert.ToString(semifinal.Rows[0][8]);
            ((TextBox)miSemifinal.Controls.Find("tb_Ptos_2B", true)[0]).Text = Convert.ToString(semifinal.Rows[0][9]);
            ((TextBox)miSemifinal.Controls.Find("tb_Ptos_1B", true)[0]).Text = Convert.ToString(semifinal.Rows[1][8]);
            ((TextBox)miSemifinal.Controls.Find("tb_Ptos_2A", true)[0]).Text = Convert.ToString(semifinal.Rows[1][9]);
            //Cargamos los dni (ocultos)
            ((Label)miSemifinal.Controls.Find("lb_DNI_1A", true)[0]).Text = Convert.ToString(semifinal.Rows[0][6]);
            ((Label)miSemifinal.Controls.Find("lb_DNI_2B", true)[0]).Text = Convert.ToString(semifinal.Rows[0][7]);
            ((Label)miSemifinal.Controls.Find("lb_DNI_1B", true)[0]).Text = Convert.ToString(semifinal.Rows[1][6]);
            ((Label)miSemifinal.Controls.Find("lb_DNI_2A", true)[0]).Text = Convert.ToString(semifinal.Rows[1][7]);

        }

        //Metodo que se encarga de rellenarme la tabla de la semifinal
        private void rellenarFinal(DataTable final)
        {
            obtenerListadoParticipantes();
            //Cargamos los nombres y apellidos 
            ((Label)miSemifinal.Controls.Find("lb_Nombre_F1", true)[0]).Text = Convert.ToString(dt_Participantes.Rows.Find(final.Rows[0][6])[1]) + " " + Convert.ToString(dt_Participantes.Rows.Find(final.Rows[0][6])[2]);
            ((Label)miSemifinal.Controls.Find("lb_Nombre_F2", true)[0]).Text = Convert.ToString(dt_Participantes.Rows.Find(final.Rows[0][7])[1]) + " " + Convert.ToString(dt_Participantes.Rows.Find(final.Rows[0][7])[2]);
            ((Label)miSemifinal.Controls.Find("lb_Nombre_SF1", true)[0]).Text = Convert.ToString(dt_Participantes.Rows.Find(final.Rows[1][6])[1]) + " " + Convert.ToString(dt_Participantes.Rows.Find(final.Rows[1][6])[2]);
            ((Label)miSemifinal.Controls.Find("lb_Nombre_SF2", true)[0]).Text = Convert.ToString(dt_Participantes.Rows.Find(final.Rows[1][7])[1]) + " " + Convert.ToString(dt_Participantes.Rows.Find(final.Rows[1][7])[2]);
            //Cargamos los puntos 
            ((TextBox)miSemifinal.Controls.Find("tb_Ptos_F1", true)[0]).Text = Convert.ToString(final.Rows[0][8]);
            ((TextBox)miSemifinal.Controls.Find("tb_Ptos_F2", true)[0]).Text = Convert.ToString(final.Rows[0][9]);
            ((TextBox)miSemifinal.Controls.Find("tb_Ptos_SF1", true)[0]).Text = Convert.ToString(final.Rows[1][8]);
            ((TextBox)miSemifinal.Controls.Find("tb_Ptos_SF2", true)[0]).Text = Convert.ToString(final.Rows[1][9]);
            //Cargamos los dni (ocultos)
            ((Label)miSemifinal.Controls.Find("lb_DNI_F1", true)[0]).Text = Convert.ToString(final.Rows[0][6]);
            ((Label)miSemifinal.Controls.Find("lb_DNI_F2", true)[0]).Text = Convert.ToString(final.Rows[0][7]);
            ((Label)miSemifinal.Controls.Find("lb_DNI_SF1", true)[0]).Text = Convert.ToString(final.Rows[1][6]);
            ((Label)miSemifinal.Controls.Find("lb_DNI_SF2", true)[0]).Text = Convert.ToString(final.Rows[1][7]);

        }


        private void obtenerListadoParticipantes()
        {
            string consulta;
            conexion = cls.ConexionMySQL.IniciarConexion();
            // Consulta SQL en cadena string
            consulta = "SELECT * FROM Participantes WHERE Activo = 1";
            // Relacionamos la consulta con la conexion mediante el objeto comando
            comando = new MySqlCommand(consulta, conexion);
            // Creamos un DataSet que contendra los datos de la BD en local
            datos = new DataSet();
            // El adaptador será el puente de union entre la BD y en DataSet
            adaptador = new MySqlDataAdapter();
            // Cargamos el comando en el adapatador
            adaptador.SelectCommand = comando;
            // Aqui es donde se realiza la consulta SQL y la guardamos en el dataset, 
            //dentro de un datatable llamado miParticipantes (Un dataset es un cto de dataTables)
            adaptador.Fill(datos, "misParticipantes");
            // Guardamos la nueba tabla de nuestro DataSet en un dataTable
            dt_Participantes = datos.Tables["misParticipantes"];
            //Definimos la clave principal de la tabla para pòder hacer posteriores busquedas con el metodo find()
            dt_Participantes.PrimaryKey = new DataColumn[] { dt_Participantes.Columns["DNI_Participante"] };
        }



        //Metodo que me inscribe los combates correspoindientes a la ronda
        private void inscribirCombatesRonda(List<Puntuacion> l1, List<Puntuacion> l2, int ronda){

            string consulta;
            conexion = cls.ConexionMySQL.IniciarConexion();
            //Primero eliminamos los registros antiguos correspondientes a los participantes para la competicion y ronda
            consulta = "DELETE FROM combates WHERE Id_Competicion = " + this.miCompeticion.ID_Competicion + " AND Ronda = " +ronda;
            comando = new MySqlCommand(consulta, conexion);
            comando.ExecuteNonQuery();

            //Combate del 1A contra 2B
            Combate miCombate1 = new Combate();
            miCombate1.Id_Competicion = miCompeticion.ID_Competicion;
            //Usare la Liga para diferenciar los combates de la primera y segunda semifinal - final
            miCombate1.Liga = 11;
            miCombate1.Ronda = ronda;
            miCombate1.Participante_Primero = 11;
            miCombate1.Participante_Segundo = 22;
            miCombate1.Dni_1 = l1[0].Dni;
            miCombate1.Dni_2 = l2[1].Dni;
            miCombate1.Puntuacion_1 = 0;
            miCombate1.Puntuacion_2 = 0;
            miCombate1.Activo = true;
            miCombate1.InsertarCombate();

            //Combate de 1B contra 2A
            Combate miCombate2 = new Combate();
            miCombate2.Id_Competicion = miCompeticion.ID_Competicion;
            miCombate2.Liga = 22;
            miCombate2.Ronda = ronda;
            miCombate2.Participante_Primero = 21;
            miCombate2.Participante_Segundo = 12;
            miCombate2.Dni_1 = l2[0].Dni;
            miCombate2.Dni_2 = l1[1].Dni;
            miCombate2.Puntuacion_1 = 0;
            miCombate2.Puntuacion_2 = 0;
            miCombate2.Activo = true;
            miCombate2.InsertarCombate();
        }

        //Metodo que me devulebe los ombates de una ronda.
        private DataTable obtener_Combates_Ronda(int ronda)
        {
            // Consulta SQL en cadena string
            string consulta = "SELECT * FROM combates WHERE Id_Competicion = " + this.miCompeticion.ID_Competicion + " AND Ronda = " + ronda;
            // Relacionamos la consulta con la conexion mediante el objeto comando
            comando = new MySqlCommand(consulta, conexion);
            // Creamos un DataSet que contendra los datos de la BD en local
            datos = new DataSet();
            // El adaptador será el puente de union entre la BD y en DataSet
            adaptador = new MySqlDataAdapter();
            // Cargamos el comando en el adapatador
            adaptador.SelectCommand = comando;
            // Aqui es donde se realiza la consulta SQL y la guardamos en el dataset, 
            //dentro de un datatable llamado miParticipantes (Un dataset es un cto de dataTables)
            adaptador.Fill(datos, "combates_ronda");
            // Guardamos la nueba tabla de nuestro DataSet en un dataTable
            DataTable tabla = datos.Tables["combates_ronda"];
            return tabla;
        }

        //Metodo que me inserta en una lista de objetos tipo puntuacion todos los resultados finales de la liga para asi ordenarlos
        private List<Puntuacion> calcularClasificacionLiga(int nLiga , int numeroParticipantesLiga){
            List<Puntuacion> listado = new List<Puntuacion>();
            if (nLiga == 1)
            {
                for (int i = 0; i < numeroParticipantesLiga; i++)
                {
                    Puntuacion miPuntuacion = new Puntuacion();
                    miPuntuacion.Nombre = ((Label)miLiga1.Controls.Find("lb_Nombre" + (i + 1), true)[0]).Text;
                    miPuntuacion.Dni = ((Label)miLiga1.Controls.Find("lb_DNI" + (i + 1), true)[0]).Text;
                    miPuntuacion.Club = ((Label)miLiga1.Controls.Find("lb_Club" + (i + 1), true)[0]).Text;
                    miPuntuacion.Ptos = Convert.ToInt32(((TextBox)miLiga1.Controls.Find("tb_Ptos" + (i + 1), true)[0]).Text);
                    listado.Add(miPuntuacion);
                }
            }
            if (nLiga == 2)
            {
                for (int i = 0; i < numeroParticipantesLiga; i++)
                {
                    Puntuacion miPuntuacion = new Puntuacion();
                    miPuntuacion.Nombre = ((Label)miLiga2.Controls.Find("lb_Nombre" + (i + 1), true)[0]).Text;
                    miPuntuacion.Dni = ((Label)miLiga2.Controls.Find("lb_DNI" + (i + 1), true)[0]).Text;
                    miPuntuacion.Club = ((Label)miLiga2.Controls.Find("lb_Club" + (i + 1), true)[0]).Text;
                    miPuntuacion.Ptos = Convert.ToInt32(((TextBox)miLiga2.Controls.Find("tb_Ptos" + (i + 1), true)[0]).Text);
                    listado.Add(miPuntuacion);
                }
            }
            listado.Sort(delegate(Puntuacion x, Puntuacion y) { return y.Ptos.CompareTo(x.Ptos); });
            return listado;
        }

        private void tableLayoutPanel1_Paint(object sender, PaintEventArgs e)
        {

        }
        public DataTable Dt_Participantes
        {
            get { return dt_Participantes; }
            set { dt_Participantes = value; }
        }
        public TableLayoutPanel TableLayoutPanel1
        {
            get { return tableLayoutPanel1; }
            set { tableLayoutPanel1 = value; }
        }
    }
}
